# 图像的通道拆分与合并

import cv2
import numpy as np

# 读取图片
img = cv2.imread("src/lena.png", cv2.IMREAD_UNCHANGED)

# 拆分通道
b, g, r = cv2.split(img)
# 显示原始图像
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

# 1、合并通道(使用BGR合成)
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

# 2、合并通道(使用RGB合成)
m = cv2.merge([r, g, b])
cv2.imshow("Merge", m)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

rows, cols, chn = img.shape

# 3、提取 B 颜色通道，而G、R通道像素值均设置为0，则显示蓝色
# 拆分通道
b = cv2.split(img)[0]
g = np.zeros((rows, cols), dtype=img.dtype)
r = np.zeros((rows, cols), dtype=img.dtype)
# 合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

# 4、提取 G 颜色通道，而B、R通道像素值均设置为0，则显示绿色
# 拆分通道
g = cv2.split(img)[1]
b = np.zeros((rows, cols), dtype=img.dtype)
r = np.zeros((rows, cols), dtype=img.dtype)
# 合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

# 5、提取 R 颜色通道，而B、G通道像素值均设置为0，则显示红色
# 拆分通道
r = cv2.split(img)[2]
b = np.zeros((rows, cols), dtype=img.dtype)
g = np.zeros((rows, cols), dtype=img.dtype)
# 合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
